package com.iluwatar;

/**
 * The service locator module.
 * Will fetch service from cache, otherwise creates a fresh service and update cache
 * 
 * @author saifasif
 *
 */
public class ServiceLocator {
	
	private static ServiceCache serviceCache = new ServiceCache();
	
	/**
	 * Fetch the service with the name param from the cache first, 
	 * if no service is found, lookup the service from the {@link InitContext} and 
	 * then add the newly created service into the cache map for future requests.
	 * @param serviceJndiName
	 * @return {@link Service}
	 */
	public static Service getService(String serviceJndiName){
		Service serviceObj = serviceCache.getService(serviceJndiName);
		if ( serviceObj != null ){
			return serviceObj;
		} else {
			/*
			 * If we are unable to retrive anything from cache, then 
			 * lookup the service and add it in the cache map
			 */
			InitContext ctx = new InitContext();
			serviceObj = (Service) ctx.lookup(serviceJndiName);
			serviceCache.addService(serviceObj);
			return serviceObj;
		}
	}

}
